/**IOC容器接口 */
export interface IADQContaniner {
  /**
   * 注册接口 通过泛型类型
   */
  RegisterType<IT, T>(): IRegistrationBuilder;
  /**
   * 读取接口 通过泛型类型
   */
  ResolveType<IT>();
  /**
   * 注册接口,构造函数传参方式(()["a"])
   * @param ifname 接口名称
   * @param classType class类型
   * @return 构建器
   */
  Register(ifname: string, classType: Function): IRegistrationBuilder;
  /**
   * 通过接口名称读取接口未实例函数
   *  @param ifname 接口名称
   * @return 最后注入实列函数
   */
  ResolveToFunc(ifname: string): Function;
  /**
   * 通过接口名称 读取接口实列类
   *  @param ifname 接口名称
   * @return 最后注入实列
   */
  Resolve<IT>(ifname: string): IT;
  /**
   * 通过接口名称 读取接口实列类
   *  @param ifname 接口名称
   * @return 所有注入实列
   */
  ResolveList<IT>(ifname: string): Array<IT>;
}
/**
 * 用于构造注册的数据结构
 *
 */
export interface IRegistrationBuilder {
  /**接口名称 */
  ifName: string;
  /**类型函数 */
  classType: Function;
  /**是否单态 */
  isInstance: boolean;
  /**中转数据 */
  transferData: any;
  /**接口名转换 */
  AS<TService>(): IRegistrationBuilder;
  /**服务命名转换 */
  Named<TService>(serviceName: string): IRegistrationBuilder;
  /**注册单态 */
  SingleInstance(): IRegistrationBuilder;
  /**构建器集合-相同注入接口存放区 */
  builderList: Array<IRegistrationBuilder>;
}
/**模块注入 */
export interface IRegisterMoudle {
  /**加载模块 */
  Load(container: IADQContaniner): void;
}
/**全局静态配置 */
export interface IGlobalConfig {}
/**全局静态缓存 */
export interface ICache {
  [key: string]: any;
  get<T>(key: string): T;
  set(key: string, value: any);
  remove(key: string);
}
